Skip to content

Matter Shell WebSocket #1990

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

JimBuzbee
Copy link
Contributor

Adding ability for Matter Shell to optionally utilize a WebSock instead of terminal I/O. Incudes a bare-bones web server to make interaction more convenient although using a full-featured web server is recommended. I have an html/javascript controller that utilizes this capability, but it is not included in this PR

…tead of terminal I/O. Incudes a bare-bones webserver to make interaction more convenient
Comment on lines +322 to +323
tile.innerHTML = "<small>Node " + nodeId + "<br><span class=" +
((status === "connected") ? "connected-node-status>" : "connecting-node-status>") + status + "</span></small>";

Check failure

Code scanning / CodeQL

Client-side cross-site scripting High

Cross-site scripting vulnerability due to
user-provided value
.
[TEMPERATURE]: (value, units = 'F') => { return (units === "F" ? (value / 100 * 9 / 5 + 32) : (value / 100)).toFixed(1) + '°' + units },
[PRESSURE]: (value, units = 'mb') => { return (value / 10000).toFixed(1) + units },
[HUMIDITY]: (value, units = '%') => { return (value / 100).toFixed(1) + units },
}

Check notice

Code scanning / CodeQL

Semicolon insertion Note

Avoid automated semicolon insertion (96% of all statements in
the enclosing script
have an explicit semicolon).
}
element.id = `attr-${currentNode}/${currentEndpoint}/${matches[1]}`;
if (!document.getElementById(`${currentEndpoint}-container-${currentNode}`)) {
endpointContainer = document.createElement('div');

Check warning

Code scanning / CodeQL

Missing variable declaration Warning

Variable endpointContainer is used like a local variable, but is missing a declaration.
endpointContainer = document.createElement('div');
endpointContainer.id = `${currentEndpoint}-container-${currentNode}`;
endpointContainer.className = 'node-container';
endpointContainer.innerHTML = `<small>${currentEndpointType.replace('MA-', '')}<small><br>`;

Check failure

Code scanning / CodeQL

Client-side cross-site scripting High

Cross-site scripting vulnerability due to
user-provided value
.
if (matches) {
if (matches[4] == ON_OFF) styleContainer(matches[1], matches[3], matches[6]);
else if (matches[4] == ILLUMINANCE || matches[4] == TEMPERATURE || matches[4] == PRESSURE || matches[4] == HUMIDITY || matches[4] == VOLTAGE) {
const value = valueFormat[matches[4]] ? valueFormat[matches[4]](matches[6]) : matches[6];

Check failure

Code scanning / CodeQL

Unvalidated dynamic method call High

Invocation of method with
user-controlled
name may dispatch to unexpected target and cause an exception.
if (matches[4] == ON_OFF) styleContainer(matches[1], matches[3], matches[6]);
else if (matches[4] == ILLUMINANCE || matches[4] == TEMPERATURE || matches[4] == PRESSURE || matches[4] == HUMIDITY || matches[4] == VOLTAGE) {
const value = valueFormat[matches[4]] ? valueFormat[matches[4]](matches[6]) : matches[6];
document.getElementById(`attr-${matches[1]}/${matches[3]}/${matches[5]}`).innerHTML = `<small>${value}</small>`;

Check failure

Code scanning / CodeQL

Client-side cross-site scripting High

Cross-site scripting vulnerability due to
user-provided value
.

matches = message.match(/Attribute value for (\w+) (\d+)\/(\d+)\/(\d+)\/(\w+): (.+)/); // from "read attribute"
if (matches )
if ( matches[1] === "onOff" ) styleContainer(matches[2], matches[3], matches[6])

Check notice

Code scanning / CodeQL

Semicolon insertion Note

Avoid automated semicolon insertion (94% of all statements in
the enclosing function
have an explicit semicolon).
matches = message.match(/Attribute value for (\w+) (\d+)\/(\d+)\/(\d+)\/(\w+): (.+)/); // from "read attribute"
if (matches )
if ( matches[1] === "onOff" ) styleContainer(matches[2], matches[3], matches[6])
else console.log( `read of ${matches[1]} = ${matches[6]}` )

Check notice

Code scanning / CodeQL

Semicolon insertion Note

Avoid automated semicolon insertion (94% of all statements in
the enclosing function
have an explicit semicolon).
matches = message.match(/Attribute value for (\w+) (\d+)\/(\d+)\/(\d+)\/(\w+): (.+)/); // from "read attribute"
if (matches )
if ( matches[1] === "onOff" ) styleContainer(matches[2], matches[3], matches[6])
else console.log( `read of ${matches[1]} = ${matches[6]}` )

Check warning

Code scanning / CodeQL

Log injection Medium

Log entry depends on a
user-provided value
.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants